A virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). A host machine (e.g., computer or server) is typically enabled to simultaneously run one or more VMs, where each VM may be used by a local or remote client. The host machine allocates a certain amount of the host's resources to each of the VMs. Each VM may use the allocated resources to execute applications, including OSs known as guests or guest OSs. The hypervisor virtualizes the underlying hardware of the host machine or emulates hardware devices, making the use of the VM transparent to the guest OS or the remote client that uses the VM. Typically, a hypervisor manages allocation and virtualization of computer resources and performs context switching, as may be necessary, to cycle between various VMs.
In a virtual environment, a VM running on a host machine may be migrated. Various considerations may be taken into account before the VM is migrated. For example, migrating a large VM may take a long time. As new technologies make VMs with terabytes of memory possible, and as network speeds and CPU cache sizes are growing more slowly, migration times may increase due to the need to move all VM memory across the network or even just read it on the hypervisor (e.g., to compress for faster transmission across the network).